1. shell的变量名的命名规则
    a、不能以数字、下划线、特殊字符形状
    b、不能包含特殊字符
    c、区分大小写

2. shell中if的结构
    if [ $var -gt number ]; then
    else
        ...
    fi

    if [ expresion ]; then
    elif [ expresion ]; then
    else
        ... ...
    fi

    if [ expresion ]; then
        ... ...
    fi

1. shell中if的表达式常用记录
    #判断变量a的值是否大于3
    if [ $a -gt 3 ]    
    if [[  $a > 3 ]]    
    if (( $a > 3 ))

    #大于、小于、大于等于、小于等于、不等于的写法
    -gt     大于
    -lt     小于
    -ge     大于等于
    -le     小于等于
    -ne     不等于
    -eq     等于

    #判断一个文件是否可写
    if [ -w /path/file.name ]; then ... fi

    #判断一个变量的值是否为空
    if [ -z $variable ]; then ... fi

    #判断一个文件或者是目录并且存在时且成立
    -e

    #判断一个文件是文件且存在时且成立
    if [ -f file.name ]; then do something fi
    if [ -x file.name ]; # 判断是否可执行
    if [ -r file.name ]; # 判断是否可读
    if [ -n "string" ]; # 判断这个字符串是否不为空，也就是说不为空的时候才会执行语句
    if [ -z "string" ]; # 如果这符串为空，则执行下面的语句，和上面的正好相反

2. 管道相关的知识
    > 表示正确输出
    
    1> 表示正确输出和>一样
    
    2> 表示错误输出
    
    2>> 表示错误重定向追加
    [root@MASTER shell]# cat 22.txt 2>> tmp.err
    [root@MASTER shell]# cat 22333.txt 2>> tmp.err
    [root@MASTER shell]# cat tmp.err 
    cat: 22.txt: No such file or directory
    cat: 22333.txt: No such file or directory

    &1 表示前面>后面的文件，如cat 1.txt > /dev/null 2>&1
    
    &> 表示所有的输出都重定向到一定文件中，包括错误和正确的重定向
    
    2>&1 表示把错误信息输出到前面>后面的那个文件中，如
    cat 1.txt > /dev/null 2>&1

    2>>&1 shell中不支持这种写法

    ... 1>> file 2>&1 表示把正确和错误输出一直追加在一个相同的文件file中
    [root@MASTER shell]# cat cat.txt 
    this is cat.txt
    [root@MASTER shell]# cat 2.txt
    cat: 2.txt: No such file or directory
    [root@MASTER shell]# > tmp
    [root@MASTER shell]# cat tmp
    [root@MASTER shell]# cat cat.txt 1>> tmp 2>&1
    [root@MASTER shell]# cat tmp
    this is cat.txt
    [root@MASTER shell]# cat 2.txt 1>> tmp 2>&1
    [root@MASTER shell]# cat tmp
    this is cat.txt
    cat: 2.txt: No such file or directory
    [root@MASTER shell]# cat cat.txt 1>> tmp 2>&1
    [root@MASTER shell]# cat tmp
    this is cat.txt
    cat: 2.txt: No such file or directory
    this is cat.txt
    [root@MASTER shell]# 

    &>> 所有内容追加重定向
    [root@MASTER shell]# cat find.all 
    cat: hello.passw: No such file or directory
    cat: cast.txt: No such file or directory
    nrpe:x:490:486:NRPE user for the NRPE service:/var/run/nrpe:/sbin/nologin
    zabbix:x:489:485:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
    test:x:2003:2003::/home/test:/bin/bash
    [root@MASTER shell]# tail -3 /etc/group &>> find.all 
    [root@MASTER shell]# cat find.all 
    cat: hello.passw: No such file or directory
    cat: cast.txt: No such file or directory
    nrpe:x:490:486:NRPE user for the NRPE service:/var/run/nrpe:/sbin/nologin
    zabbix:x:489:485:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
    test:x:2003:2003::/home/test:/bin/bash
    nrpe:x:486:
    zabbix:x:485:
    test:x:2003:

    数字比较要使用-eq，字符比较使用==

    参考文档：http://blog.sina.com.cn/s/blog_5842daa30101enz5.html

3. 如果把字符当作数字来处理，那么字符会被看作0来处理

4. seq命令，用来生成一个序列的，可以设置步长，如下
    cn@cn-Alienware-15 ~ $ seq 1 3
    1
    2
    3
    cn@cn-Alienware-15 ~ $ seq 15 10
    cn@cn-Alienware-15 ~ $ seq 1 5 10
    1
    6
    cn@cn-Alienware-15 ~ $ seq 10 -3 1
    10
    7
    4
    1lienware-15 ~ $ seq -w 001 10
    001
    002
    003
    004
    005
    006
    007
    008
    009
    010
    cn@cn-Alienware-15 ~ $ 

5. shell中shift的含义
    http://blog.sina.com.cn/s/blog_75f4e17c010120ag.html

6. shell中的关键字
    function 用来声明一个函数，在定义函数的时候function是可以省略的
    local 用来声明一个局部变量

7. shell中的数组
    # 定义一个数组
    arr=(1 2 3 4 5)
    # 显示数组所有的元素
    echo ${arr[@]}
    echo ${arr[*]}
    # 显示数组的第3个元素
    echo ${arr[2]}
    # 修改一个元素的值
    arr[3]=100
    echo ${a[2]}
    # 打印数组的长度、元素的个数
    echo ${#arr[@]}
    echo ${#arr[*]}
    # 删除指定下标的元素
    unset arr[index]

    # 只显示指定下标的值，只显示下标0－2的值，${arr[@]:0:3}表示在所有的元素中，从下标0开始取3个元素
    [root@MASTER shell]#  echo ${arr[@]}
    500 2 4 5 6 7 8 900 10
    [root@MASTER shell]#  echo ${arr[@]:0:3}
    500 2 4
    [root@MASTER shell]#
